#ifndef GPGPU_H
#define	GPGPU_H

//#define PROFILING // Define to see the time the kernel takes
//#define __NO_STD_VECTOR // Use cl::vector instead of STL version
#define __CL_ENABLE_EXCEPTIONS // needed for exceptions
#define CL_USE_DEPRECATED_OPENCL_1_1_APIS

#include "Singleton.h"
#include <CL/cl.hpp>

class GPGPU : public Singleton<GPGPU> {
public:
    GPGPU();
    virtual ~GPGPU();

    int InitializeOCL();

    cl::Context *context;
    cl::CommandQueue *queue;
    cl::Kernel *kernel_gauss;
    cl::Kernel *kernel_podzial;
    cl::Buffer *A;

private:
    const cl::Program::Sources AddFile(const std::string& file);
    cl::Program *program_podzial;
    cl::Program *program_gauss;   
    cl::Program::Sources sources_podzial;
    cl::Program::Sources sources_gauss;
};

#define GPU GPGPU::GetSingleton()

#endif	/* GPGPU_H */

